class Solution {
public:
    int numSubarraysWithSum(vector<int>& nums, int goal) {
        for(int i = 1; i < nums.size(); i++){
            nums[i] += nums[i - 1];
        }
        int hash[60001], ans = 0;
        memset(hash, 0, sizeof(hash));
        hash[goal] = 1;
        for(int i = 0; i < nums.size(); i++){
            ans += hash[nums[i]];
            hash[nums[i] + goal]++;
        }
        return ans;
    }
};

/*给你一个二元数组 nums ，和一个整数 goal ，请你统计并返回有多少个和为 goal 的非空子数组。

子数组是数组的一段连续部分*/